//---------------------------------------------------------------------------------------
GLOBAL

	int gui_fpg;
	
	// tile seleccionado
	_point cursorpos;
	
	// busqueda de caminos
	_point path_start;
	_point path_end;

END

//---------------------------------------------------------------------------------------
PROCESS cursor()
//
// Maneja el cursor de seleccion de tile
//

PRIVATE

	_point tpos;	// posicion en el scroll en tiles
	_point actual;	// posicion actual en pixels
	_point final;	// posicion a la que debe llegar
	_point dist;	// distancia entre la posicion actual y la final
	
	int velocidad;
	int lockdelay;
	
	int lock;		// bloqueo de teclas
	int locktimer;
	
	int animtimer;

END

BEGIN

	priority = 2;

	file = gui_fpg;
	graph = 50;
	size = TILE_SCALE * 2;
	
	velocidad = TILE_X / 8;	// velocidad del cursor
	lockdelay = (TILE_X / velocidad) - 2;
	/*
	// pos
	write_var ( 0, 80, 90, 4, tpos.x );
	write_var ( 0, 80, 100, 4, tpos.y );
	
	// final pos
	write_var ( 0, 120, 90, 4, final.x );
	write_var ( 0, 120, 100, 4, final.y );

	// actual pos
	write_var ( 0, 160, 90, 4, actual.x );
	write_var ( 0, 160, 100, 4, actual.y );

	// actual pos
	write_var ( 0, 200, 90, 4, dist.x );
	write_var ( 0, 200, 100, 4, dist.y );
	*/

	LOOP
	
		locktimer++;
		animtimer++;
		
		// muevo el cursor 1 posicion
		if ( key ( _left ) AND lock == false AND tpos.x > 0)
			locktimer = 0;
			tpos.x--;
		elsif ( key ( _right ) AND lock == false AND tpos.x < tiles_x-1)
			locktimer = 0;
			tpos.x++;
		end		
		if ( key ( _up ) AND lock == false AND tpos.y > 0)
			locktimer = 0;
			tpos.y--;
		elsif ( key ( _down ) AND lock == false AND tpos.y < tiles_y-1)
			locktimer = 0;
			tpos.y++;
		end
		
		// desbloqueo teclas
		if (locktimer > lockdelay )
			lock = false;
		else
			lock = true;
		end
		
		// establezco la posicion final
		final.x = (tpos.x * TILE_X) + (TILE_X / 2);
		final.y = (tpos.y * TILE_Y) + (TILE_Y / 2);
		
		//calculo la distancia hacia la posicion final
		dist.x = final.x - actual.x;
		dist.y = final.y - actual.y;
		
		// muevo hacia la posicion final si corresponde
		if ( ABS (dist.x) > velocidad )
			if ( dist.x > 0)
				actual.x += velocidad;
			else
				actual.x -= velocidad;
			end
		else
			actual.x = final.x;
		end
		
		if ( ABS (dist.y) > velocidad )
			if ( dist.y > 0)
				actual.y += velocidad;
			else
				actual.y -= velocidad;
			end
		else
			actual.y = final.y;
		end
		
		// si estoy en los tiles del borde de la pantalla muevo el scroll
		// REVISAR
		if (actual.x - ts.pos.x > ts.endpoint.x - TILE_X / 2 )
			ts.pos.x += velocidad;
			ts.draw = true;
		end
		if ( actual.y - ts.pos.y > ts.endpoint.y - TILE_X / 2 )
			ts.pos.y += velocidad;
			ts.draw = true;
		end
		if ( actual.x - ts.pos.x < TILE_X / 2 AND ts.pos.x > ts.startpoint.x )
			ts.pos.x -= velocidad;
			ts.draw = true;
		end
		if ( actual.y - ts.pos.y < TILE_Y / 2 AND ts.pos.y > ts.startpoint.y )
			ts.pos.y -= velocidad;
			ts.draw = true;
		end
		
		// actualizo posicion global
		cursorpos.x = tpos.x;
		cursorpos.y = tpos.y;
		
		// actualizo posicion en pantalla
		x = actual.x - ts.pos.x;
		y = actual.y - ts.pos.y;
		
		// animacion
		if ( animtimer > 10 )
			animtimer = 0;
			if ( graph == 50 )
				graph = 51;
			else
				graph = 50;
			end
		end
		
		/* DEBUG creo busqueda de caminos */
		
		/*
		if ( key ( _space )  )
		
			if ( path_start.x == 0 AND path_start.y == 0 )
			
				marker(tpos.x, tpos.y);
				print( "marker en: " + tpos.x + "," + tpos.y );
				
				path_start.x = tpos.x;
				path_start.y = tpos.y;
			
			elsif ( (path_end.x == 0 AND path_end.y == 0) AND (path_start.x <> tpos.x OR path_start.y <> tpos.y) )
			
				marker(tpos.x, tpos.y);
				print( "marker en: " + tpos.x + "," + tpos.y );
				
				path_end.x = tpos.x;
				path_end.y = tpos.y;
				
				//llamo a la busqueda de caminos
				buscar_camino ( path_start, path_end );
				
			end
				
		end
		
		*/
		
		frame;
		
	END

END

//---------------------------------------------------------------------------------------
PROCESS marker(pos_x, pos_y)

BEGIN

	file = gui_fpg;
	graph = 50;

	LOOP
	
		x = (pos_x * TILE_X) - ts.pos.x + (TILE_X / 2);
		y = (pos_y * TILE_Y) - ts.pos.y + (TILE_Y / 2);
	
		frame;
		
	END

END
